home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Disc to the Future 2
/
Disc to the Future Part II Programmer's Reference (Wayzata Technology)(6013)(1992).bin
/
MAC
/
MPW_TOOL
/
TOOLS
/
TOOLS_WI
/
ICON_8
/
ICONX_FO
/
RSWITCH.A
< prev
next >
Wrap
Text File
|
1990-03-02
|
1KB
|
63 lines
*
* Co-expression context switch for Macintosh Icon
*
STRING C
PRINT LITS
CASE OBJ
PRINT OFF
INCLUDE 'SysEqu.a'
PRINT ON
IMPORT interp,syserr
SEG 'rswitch'
coswitch PROC EXPORT
cs_regs REG D2-D7/A2-A7 ;These 12 registers get saved
; on co-expression switch
cs_nregs EQU 12 ;Number of registers saved
;
; Save registers of the co-expression being deactivated.
;
MOVE.L 4(SP),A0 ;Get address of old task's registers
MOVE.L 8(SP),A1 ;Get address of new task's registers
ADD.L #cs_nregs*4,A0 ;Bump to end of area for backward move
MOVEM.L cs_regs,-(A0) ;Save registers
TST.L 12(SP) ;Check whether this is first activation
BNE.S not_first ;Jump if not first
;
; Come here for co-expression's first activation. Set the stack
; pointer to its stack and call interp.
first
MOVE.L #0,StkLowPt ;Disable Mac's "stack sniffer"
MOVE.L (A1),SP ;Get new stack pointer
MOVE.L #0,-(SP) ;Set up args for interp
MOVE.L #0,-(SP) ; ...
JSR interp ;Call interp
ADD.L #8,SP ;Pop args off stack
;
; We should never get here, but just in case ...
;
PEA #'interp() returned in coswitch'
JSR syserr ;System error
;
; Come here if not the first activation. Restore registers and return.
;
not_first
MOVEM.L (A1)+,cs_regs ;Restore registers
RTS ;Return
;
; This routine is called at the end of an Icon run. It re-enables
; the "stack sniffer".
;
ResetStack PROC EXPORT
MOVE.L SP,StkLowPt
RTS
END